//#define  _CRT_SECURE_NO_WARNINGS
//
//#include <stdio.h>
//#include <stdlib.h>
//#include <limits.h>
//
//typedef struct {
//    int vertex;
//    int weight;
//} Edge;
//
//typedef struct {
//    int distance;
//    int visited;
//} Vertex;
//
//void dijkstra(int n, int s, int m, Edge** graph, int k, int* fans) {
//    Vertex* vertices = (Vertex*)malloc((n + 1) * sizeof(Vertex));
//    for (int i = 1; i <= n; i++) {
//        vertices[i].distance = INT_MAX;
//        vertices[i].visited = 0;
//    }
//    vertices[s].distance = 0;
//
//    for (int i = 1; i <= n; i++) {
//        int minDistance = INT_MAX;
//        int minVertex = -1;
//
//        for (int j = 1; j <= n; j++) {
//            if (!vertices[j].visited && vertices[j].distance < minDistance) {
//                minDistance = vertices[j].distance;
//                minVertex = j;
//            }
//        }
//
//        if (minVertex == -1) {
//            break;
//        }
//
//        vertices[minVertex].visited = 1;
//
//        for (int j = 0; j < m; j++) {
//            int u = graph[j][0].vertex;
//            int v = graph[j][1].vertex;
//            int w = graph[j][1].weight;
//
//            if (u == minVertex && !vertices[v].visited && vertices[u].distance + w < vertices[v].distance) {
//                vertices[v].distance = vertices[u].distance + w;
//            }
//        }
//    }
//
//    for (int i = k-1; i >=0; i--) {
//        printf("%d ", vertices[fans[i]].distance);
//    }
//    printf("\n");
//
//    free(vertices);
//}
//
//int main() {
//    int n, m, k, s;
//    scanf("%d %d %d %d", &n, &m, &k, &s);
//
//    Edge** graph = (Edge**)malloc(m * sizeof(Edge*));
//    for (int i = 0; i < m; i++) {
//        graph[i] = (Edge*)malloc(2 * sizeof(Edge));
//    }
//
//    for (int i = 0; i < m; i++) {
//        int x, y, z;
//        scanf("%d %d %d", &x, &y, &z);
//        graph[i][0].vertex = x;
//        graph[i][1].vertex = y;
//        graph[i][1].weight = z;
//    }
//
//    int* fans = (int*)malloc(k * sizeof(int));
//    for (int i = 0; i < k; i++) {
//        scanf("%d", &fans[i]);
//    }
//
//    dijkstra(n, s, m, graph, k, fans);
//
//    for (int i = 0; i < m; i++) {
//        free(graph[i]);
//    }
//    free(graph);
//    free(fans);
//
//    return 0;
//}
